package cn.iocoder.yudao.module.vlog.comment.service;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.vlog.comment.bo.VLogCommentBO;
import cn.iocoder.yudao.module.vlog.comment.dal.dataobject.VLogCommentDO;
import cn.iocoder.yudao.module.vlog.comment.vo.AppVLogCommentCreateReqVO;
import cn.iocoder.yudao.module.vlog.comment.vo.AppVLogCommentPageReqVO;
import cn.iocoder.yudao.module.vlog.comment.vo.VLogCommentPageReqVO;
import jakarta.validation.Valid;

import java.util.List;
import java.util.Set;

/**
 * 视频评论 Service 实现类
 *
 * @author 山野羡民（1032694760@qq.com）
 */
public interface VLogCommentService {

    /**
     * 创建视频评论
     *
     * @param userId      用户编号
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createVLogComment(Long userId, @Valid AppVLogCommentCreateReqVO createReqVO);

    /**
     * 获得视频评论
     *
     * @param id 编号
     * @return 视频评论
     */
    VLogCommentDO getVLogComment(Long id);

    /**
     * 设置视频评论显示/隐藏
     *
     * @param id      编号
     * @param visible 是否显示
     */
    void updateVLogCommentVisible(Long id, Boolean visible);


    /**
     * 删除视频评论
     *
     * @param userId 用户编号
     * @param id     编号
     */
    void deleteVLogComment(Long userId, Long id);

    /**
     * 获得视频评论分页
     *
     * @param pageReqVO 分页查询
     * @return 视频评论分页
     */
    PageResult<VLogCommentBO> getVLogCommentPage(VLogCommentPageReqVO pageReqVO);

    /**
     * 获得视频评论分页
     *
     * @param pageReqVO 分页查询
     * @return 视频评论分页
     */
    PageResult<VLogCommentBO> getVLogCommentPage(AppVLogCommentPageReqVO pageReqVO);

    /**
     * 批量获得视频评论列表
     *
     * @param parentIds 视频评论编号数组
     * @return 视频评论列表
     */
    List<VLogCommentBO> getVLogCommentListByParentId(List<Long> parentIds);


    // ==================== 子表（视频评论点赞） ====================

    /**
     * 视频评论点赞
     *
     * @param userId    用户编号
     * @param commentId 视频评论编号
     */
    void likeVLogComment(Long userId, Long commentId);

    /**
     * 视频评论取消点赞
     *
     * @param userId    用户编号
     * @param commentId 视频评论编号
     */
    void unlikeVLogComment(Long userId, Long commentId);

    /**
     * 获得视频评论点赞用户编号数组
     *
     * @param commentId 评论编号
     * @return 用户编号数组
     */
    Set<Long> getVLogCommentLikedUserIds(Long commentId);

}
